package com.cuit.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtUtil {

    private static final String SECRET_KEY = "-token";

    private static final long EXPIRE_TIME = 1000 * 60 * 60 * 24;

    /**
     * 生成用户认证令牌
     *
     * @param username 用户名，用于标识令牌的主体
     * @return 生成的JWT令牌字符串
     */
    public static String getToken(String username) {
        // 创建JWT令牌构建器
        return Jwts.builder()
                // 设置令牌的主体，即用户名
                .setSubject(username)
                // 设置令牌的发行时间，为当前时间
                .setIssuedAt(new Date())
                // 设置令牌的过期时间，从当前时间起加上设定的过期时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME))
                // 使用HS512算法和密钥对令牌进行签名
                .signWith(SignatureAlgorithm.HS512,SECRET_KEY)
                // 将令牌压缩为字符串形式并返回
                .compact();
    }

    /**
     * 解析JWT令牌，提取并返回令牌中的声明信息
     * 该方法主要用于验证令牌的有效性，并从令牌中获取用户的声明信息
     *
     * @param token 待解析的JWT令牌字符串
     * @return 返回JWT令牌中的声明信息对象Claims
     */
    public static Claims parseToken(String token){
        // 使用预定义的密钥解析JWT令牌，并提取其中的声明信息
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
    }

    public static boolean validateToken(String token){
        try{
            parseToken(token);
            return true;
        }catch (Exception e){
            return false;
        }
    }


}
